﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using QuanLyKho.Server.BLL;
using QuanLyKho.Server;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Docking;

namespace QuanLyKho
{
    /// <summary>
    /// Interaction logic for ucDmThuoc.xaml
    /// </summary>
    public partial class ucDmThuoc : UserControl
    {
        // khai bao bien
        private Dm_ThuocBLL dmThuocServer;
        private List<Dm_Thuoc> listDmThuocClient;
        private Dm_Thuoc objectDmThuocClient;
        private Dm_Thuoc objectDmThuocClientBacKup;
        private bool laThemMoi = true;


        public ucDmThuoc()
        {
            InitializeComponent();
            FormLoaded();
            GetListDmThuoc();
        }

        private void FormLoaded()
        {
            dmThuocServer = new Dm_ThuocBLL();
            listDmThuocClient = new List<Dm_Thuoc>();
            GetThemMoi();
        }

        private void GetThemMoi()
        {
            txtMaDVT.IsEnabled = true;
            txtMaDVT.Text = "";
            txtTenDVT.Text = "";
            chkKichHoat.IsChecked = true;
            chkDaXoa.IsChecked = false;
            txtGiaNhap.Text = "0";
            txtGiaXuat.Text = "0";
            txtSoDK.Text = "";
            cboDonViTinh.SelectedIndex = -1;
            cboDonViTinh.EditValue = null;
            cboHamLuong.SelectedIndex = -1;
            cboHamLuong.EditValue = null;
            cboQuyCach.SelectedIndex = -1;
            cboQuyCach.EditValue = null;
            laThemMoi = true;
            objectDmThuocClient = new Dm_Thuoc();
            objectDmThuocClientBacKup = new Dm_Thuoc();
            txtMaDVT.Focus();

            GetListDmDonViTinh();
            GetListDmHamLuong();
            GetListDmQuyCach();
        }

        private void GetListDmThuoc()
        {
            try
            {
                listDmThuocClient = new List<Dm_Thuoc>();
                listDmThuocClient = dmThuocServer.ListDmThuoc();
                gridDsDmThuoc.ItemsSource = listDmThuocClient;
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.","Lỗi",MessageBoxButton.OK,MessageBoxImage.Error);
            }
        }

        private void GetFindListDmThuoc(string maDVT, string tenDVT)
        {
            try
            {
                listDmThuocClient = new List<Dm_Thuoc>();
                listDmThuocClient = dmThuocServer.FindListDmThuoc(maDVT,tenDVT);
                gridDsDmThuoc.ItemsSource = listDmThuocClient;
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private bool CheckThongTinDauVao()
        {
            if (string.IsNullOrEmpty(txtMaDVT.Text))
            {
                DXMessageBox.Show("Chưa nhập mã thuốc", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                txtMaDVT.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(txtTenDVT.Text))
            {
                DXMessageBox.Show("Chưa nhập tên thuốc", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                txtTenDVT.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(cboDonViTinh.DisplayText.Trim()))
            {
                DXMessageBox.Show("Chưa chọn đơn vị tính", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                txtTenDVT.Focus();
                return false;
            }
            return true;
        }

        private void SetValueInTextBox(Dm_Thuoc objectTemple)
        {
            try
            {
                txtMaDVT.IsEnabled = false;
                txtMaDVT.Text = objectTemple.MaThuoc;
                txtTenDVT.Text = objectTemple.TenThuoc;
                txtSoDK.Text = objectTemple.SoDK;
                txtGiaNhap.Text = objectTemple.GiaNhap.ToString();
                txtGiaXuat.Text = objectTemple.GiaXuat.ToString();
                chkKichHoat.IsChecked = objectTemple.KichHoat;
                chkDaXoa.IsChecked = objectTemple.DaXoa;

                cboDonViTinh.SelectedItem = objectTemple.Dm_DonViTinh;
                cboDonViTinh.EditValue = objectTemple.Dm_DonViTinh;

                cboHamLuong.SelectedItem = objectTemple.Dm_HamLuong;
                cboHamLuong.EditValue = objectTemple.Dm_HamLuong;

                cboQuyCach.SelectedItem = objectTemple.Dm_QuyCach;
                cboQuyCach.EditValue = objectTemple.Dm_QuyCach;
            }
            catch(Exception)
            {
            }
        }

        private void GetListDmDonViTinh()
        {
            try
            {
                List<Dm_DonViTinh> listDmDonViTinh = new List<Dm_DonViTinh>();
                Dm_DonViTinhBLL dmDonViTinhServer = new Dm_DonViTinhBLL();
                listDmDonViTinh = dmDonViTinhServer.ListDmDonViTinh().Where(c=>c.KichHoat == true).ToList();
                cboDonViTinh.ItemsSource = listDmDonViTinh;
                cboDonViTinh.DisplayMember = "TenDonViTinh";
                cboDonViTinh.ValueMember = "MaDonViTinh";
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void GetListDmQuyCach()
        {
            try
            {
                List<Dm_QuyCach> listDmQuyCach = new List<Dm_QuyCach>();
                Dm_QuyCachBLL dmQuyCachServer = new Dm_QuyCachBLL();
                listDmQuyCach = dmQuyCachServer.ListDmQuyCach().Where(c => c.KichHoat == true).ToList();
                cboQuyCach.ItemsSource = listDmQuyCach;
                cboQuyCach.DisplayMember = "TenQuyCach";
                cboQuyCach.ValueMember = "MaQuyCach";
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void GetListDmHamLuong()
        {
            try
            {
                List<Dm_HamLuong> listDmHamLuong = new List<Dm_HamLuong>();
                Dm_HamLuongBLL dmHamLuongServer = new Dm_HamLuongBLL();
                listDmHamLuong = dmHamLuongServer.ListDmHamLuong().Where(c => c.KichHoat == true).ToList();
                cboHamLuong.ItemsSource = listDmHamLuong;
                cboHamLuong.DisplayMember = "TenHamLuong";
                cboHamLuong.ValueMember = "MaHamLuong";
            }
            catch (Exception)
            {
                DXMessageBox.Show("Không lấy được dữ liệu. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void btnThemMoi_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            GetThemMoi();
        }

        private void btnLuu_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                if (CheckThongTinDauVao() == false)
                {
                    return;
                }

                if (laThemMoi)
                {
                    if (dmThuocServer.FindTrungMaDmThuoc(txtMaDVT.Text))
                    {
                        DXMessageBox.Show("Đã tồn tại mã " + txtMaDVT.Text.ToUpper() + " trong dữ liệu", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        txtMaDVT.Focus();
                        return;
                    }
                    objectDmThuocClient = new Dm_Thuoc();
                    objectDmThuocClient.MaThuoc = txtMaDVT.Text.ToUpper();
                    objectDmThuocClient.TenThuoc = txtTenDVT.Text;
                    objectDmThuocClient.SoDK = txtSoDK.Text;
                    objectDmThuocClient.GiaNhap = decimal.Parse(txtGiaNhap.Text);
                    objectDmThuocClient.GiaXuat = decimal.Parse(txtGiaXuat.Text);
                    objectDmThuocClient.DaXoa = chkDaXoa.IsChecked.Value;
                    objectDmThuocClient.MaDonViTinh = ((Dm_DonViTinh)cboDonViTinh.SelectedItem != null ? (Dm_DonViTinh)cboDonViTinh.SelectedItem : (Dm_DonViTinh)cboDonViTinh.EditValue).MaDonViTinh;
                    //objectDmThuocClient.Dm_DonViTinh = (Dm_DonViTinh)cboDonViTinh.SelectedItem != null ? (Dm_DonViTinh)cboDonViTinh.SelectedItem : (Dm_DonViTinh)cboDonViTinh.EditValue;
                    objectDmThuocClient.MaHamLuong = ((Dm_HamLuong)cboHamLuong.SelectedItem != null ? (Dm_HamLuong)cboHamLuong.SelectedItem : (Dm_HamLuong)cboHamLuong.EditValue).MaHamLuong;
                    //objectDmThuocClient.Dm_HamLuong = (Dm_HamLuong)cboHamLuong.SelectedItem != null ? (Dm_HamLuong)cboHamLuong.SelectedItem : (Dm_HamLuong)cboHamLuong.EditValue;
                    objectDmThuocClient.MaQuyCach = ((Dm_QuyCach)cboQuyCach.SelectedItem != null ? (Dm_QuyCach)cboQuyCach.SelectedItem : (Dm_QuyCach)cboQuyCach.EditValue).MaQuyCach;
                    //objectDmThuocClient.Dm_QuyCach = (Dm_QuyCach)cboQuyCach.SelectedItem != null ? (Dm_QuyCach)cboQuyCach.SelectedItem : (Dm_QuyCach)cboQuyCach.EditValue;
                    objectDmThuocClient.KichHoat = chkKichHoat.IsChecked.Value;

                    if (dmThuocServer.AddNewDmThuoc(objectDmThuocClient) != null)
                    {
                        DXMessageBox.Show("Thêm mới dữ liệu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        DXMessageBox.Show("Thêm mới dữ liệu không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        return;
                    }
                }
                else
                {
                    objectDmThuocClient = new Dm_Thuoc();
                    objectDmThuocClient.MaThuoc = txtMaDVT.Text.ToUpper();
                    objectDmThuocClient.TenThuoc = txtTenDVT.Text;
                    objectDmThuocClient.SoDK = txtSoDK.Text;
                    objectDmThuocClient.GiaNhap = decimal.Parse(txtGiaNhap.Text);
                    objectDmThuocClient.GiaXuat = decimal.Parse(txtGiaXuat.Text);
                    objectDmThuocClient.DaXoa = chkDaXoa.IsChecked.Value;
                    objectDmThuocClient.MaDonViTinh = ((Dm_DonViTinh)cboDonViTinh.SelectedItem != null ? (Dm_DonViTinh)cboDonViTinh.SelectedItem : (Dm_DonViTinh)cboDonViTinh.EditValue).MaDonViTinh;
                    objectDmThuocClient.Dm_DonViTinh = (Dm_DonViTinh)cboDonViTinh.SelectedItem != null ? (Dm_DonViTinh)cboDonViTinh.SelectedItem : (Dm_DonViTinh)cboDonViTinh.EditValue;
                    objectDmThuocClient.MaHamLuong = ((Dm_HamLuong)cboHamLuong.SelectedItem != null ? (Dm_HamLuong)cboHamLuong.SelectedItem : (Dm_HamLuong)cboHamLuong.EditValue).MaHamLuong;
                    objectDmThuocClient.Dm_HamLuong = (Dm_HamLuong)cboHamLuong.SelectedItem != null ? (Dm_HamLuong)cboHamLuong.SelectedItem : (Dm_HamLuong)cboHamLuong.EditValue;
                    objectDmThuocClient.MaQuyCach = ((Dm_QuyCach)cboQuyCach.SelectedItem != null ? (Dm_QuyCach)cboQuyCach.SelectedItem : (Dm_QuyCach)cboQuyCach.EditValue).MaQuyCach;
                    objectDmThuocClient.Dm_QuyCach = (Dm_QuyCach)cboQuyCach.SelectedItem != null ? (Dm_QuyCach)cboQuyCach.SelectedItem : (Dm_QuyCach)cboQuyCach.EditValue;
                    objectDmThuocClient.KichHoat = chkKichHoat.IsChecked.Value;

                    if (dmThuocServer.UpdateDmThuoc(objectDmThuocClient))
                    {
                        DXMessageBox.Show("Cập nhật dữ liệu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        DXMessageBox.Show("Cập nhật dữ liệu không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        return;
                    }
                }
                GetThemMoi();
                GetListDmThuoc();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Thao tác không thành công. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                GetThemMoi();
            }
        }

        private void btnXoa_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                objectDmThuocClient = new Dm_Thuoc();
                objectDmThuocClient = (Dm_Thuoc)gridDsDmThuoc.GetFocusedRow();
                if (objectDmThuocClient == null)
                {
                    return;
                }

                if (DXMessageBox.Show("Bạn muốn xóa dữ liệu này ?", "Thông báo", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                {
                    if (dmThuocServer.FindMaThuocInNhapChiTietThuoc(objectDmThuocClient.MaThuoc))
                    {
                        DXMessageBox.Show("Mã thuốc này đã được sử dụng cho danh sách nhập thuốc.\nBạn chỉ có thể cập nhật \"Đã xóa\" cho mã thuốc này.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                        return;
                    }
                    else
                    {
                        if (dmThuocServer.DeleteDmThuoc(objectDmThuocClient))
                        {
                            DXMessageBox.Show("Xóa dữ liệu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                        }
                        else
                        {
                            DXMessageBox.Show("Xóa dữ liệu không thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                            return;
                        }
                    }

                    
                }
                GetThemMoi();
                GetListDmThuoc();
            }
            catch (Exception)
            {
                DXMessageBox.Show("Thao tác không thành công. Kết nối máy chủ bị gián đoạn.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                GetThemMoi();
            }
        }

        private void btnHuyBo_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                FormLoaded();
                GetListDmThuoc();
            }
            catch(Exception)
            {
            }
        }

        private void btnDong_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
        {
            try
            {
                DockLayoutManager dockLayoutManager = this.Parent as DockLayoutManager;
                BaseLayoutItem bli = dockLayoutManager.ActiveMDIItem;
                if (bli != null)
                {
                    dockLayoutManager.DockController.Close(bli);
                }
            }
            catch (Exception)
            {
            }
        }

        private void view_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                if (e.RightButton == MouseButtonState.Pressed) return;
                if (gridDsDmThuoc.View.GetRowHandleByMouseEventArgs(e) != GridControl.InvalidRowHandle
                    && gridDsDmThuoc.View.GetRowHandleByMouseEventArgs(e) != GridControl.AutoFilterRowHandle
                    && gridDsDmThuoc.View.GetRowHandleByMouseEventArgs(e) != GridControl.NewItemRowHandle)
                {
                    objectDmThuocClient = (Dm_Thuoc)gridDsDmThuoc.GetFocusedRow();
                    laThemMoi = false;
                    SetValueInTextBox(objectDmThuocClient);
                }
            }
            catch
            {
            }
        }

        private void view_KeyUp(object sender, KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.Enter)
                {
                    objectDmThuocClient = (Dm_Thuoc)gridDsDmThuoc.GetFocusedRow();
                    laThemMoi = false;
                    SetValueInTextBox(objectDmThuocClient);
                }
            }
            catch
            {
            }
        }
    }
}
